home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / test / test_warnings.py < prev    next >
Text File  |  2005-10-18  |  3KB  |  90 lines

  1. import warnings
  2. import os
  3. import unittest
  4. from test import test_support
  5.  
  6. # The warnings module isn't easily tested, because it relies on module
  7. # globals to store configuration information.  setUp() and tearDown()
  8. # preserve the current settings to avoid bashing them while running tests.
  9.  
  10. # To capture the warning messages, a replacement for showwarning() is
  11. # used to save warning information in a global variable.
  12.  
  13. class WarningMessage:
  14.     "Holds results of latest showwarning() call"
  15.     pass
  16.  
  17. def showwarning(message, category, filename, lineno, file=None):
  18.     msg.message = str(message)
  19.     msg.category = category.__name__
  20.     msg.filename = os.path.basename(filename)
  21.     msg.lineno = lineno
  22.  
  23. class TestModule(unittest.TestCase):
  24.  
  25.     def setUp(self):
  26.         global msg
  27.         msg = WarningMessage()
  28.         self._filters = warnings.filters[:]
  29.         self._showwarning = warnings.showwarning
  30.         warnings.showwarning = showwarning
  31.         self.ignored = [w[2].__name__ for w in self._filters
  32.             if w[0]=='ignore' and w[1] is None and w[3] is None]
  33.  
  34.     def tearDown(self):
  35.         warnings.filters = self._filters[:]
  36.         warnings.showwarning = self._showwarning
  37.  
  38.     def test_warn_default_category(self):
  39.         for i in range(4):
  40.             text = 'multi %d' %i    # Different text on each call
  41.             warnings.warn(text)
  42.             self.assertEqual(msg.message, text)
  43.             self.assertEqual(msg.category, 'UserWarning')
  44.  
  45.     def test_warn_specific_category(self):
  46.         text = 'None'
  47.         # XXX OverflowWarning should go away for Python 2.5.
  48.         for category in [DeprecationWarning, FutureWarning, OverflowWarning,
  49.                     PendingDeprecationWarning, RuntimeWarning,
  50.                     SyntaxWarning, UserWarning, Warning]:
  51.             if category.__name__ in self.ignored:
  52.                 text = 'filtered out' + category.__name__
  53.                 warnings.warn(text, category)
  54.                 self.assertNotEqual(msg.message, text)
  55.             else:
  56.                 text = 'unfiltered %s' % category.__name__
  57.                 warnings.warn(text, category)
  58.                 self.assertEqual(msg.message, text)
  59.                 self.assertEqual(msg.category, category.__name__)
  60.  
  61.     def test_filtering(self):
  62.  
  63.         warnings.filterwarnings("error", "", Warning, "", 0)
  64.         self.assertRaises(UserWarning, warnings.warn, 'convert to error')
  65.  
  66.         warnings.resetwarnings()
  67.         text = 'handle normally'
  68.         warnings.warn(text)
  69.         self.assertEqual(msg.message, text)
  70.         self.assertEqual(msg.category, 'UserWarning')
  71.  
  72.         warnings.filterwarnings("ignore", "", Warning, "", 0)
  73.         text = 'filtered out'
  74.         warnings.warn(text)
  75.         self.assertNotEqual(msg.message, text)
  76.  
  77.         warnings.resetwarnings()
  78.         warnings.filterwarnings("error", "hex*", Warning, "", 0)
  79.         self.assertRaises(UserWarning, warnings.warn, 'hex/oct')
  80.         text = 'nonmatching text'
  81.         warnings.warn(text)
  82.         self.assertEqual(msg.message, text)
  83.         self.assertEqual(msg.category, 'UserWarning')
  84.  
  85. def test_main(verbose=None):
  86.     test_support.run_unittest(TestModule)
  87.  
  88. if __name__ == "__main__":
  89.     test_main(verbose=True)
  90.